Programavimo kryptis, kurios pagrindinė idėja yra programų komponentų, iš kurių būtų galima surinkti norimų galimybių programas, kūrimas ir komponavimas.
Kuriant sudėtingą programinę įrangą iš atskirų komponentų, sumažinama jos projektavimo trukmė ir atnaujinimo sąnaudos, palyginti su monolitine (nekomponentine) programine įranga, nes komponentus galima naudoti daugelį kartų, dalį komponentų galima paimti iš esamų komponentų bibliotekų, atnaujinant tik tam tikrus komponentus, o ne visą programą. Komponentas panašus į statybinį bloką. Kiekvienas komponentas atlieka tam tikrą funkciją (arba funkcijas) ir turi sąsają, per kurią programos projektuotojas komponuoja jį su kitais komponentais.